目前,云监控只支持数字签名算法HMAC-SHA1。通过本文您可以了解数字签名算法HMAC-SHA1的操作方法。
操作步骤
准备可用的阿里云访问密钥。
当HTTP请求生成签名时,需要使用一对访问密钥(AccessKey ID和AccessKey Secret)。
说明您可以使用已存在的访问密钥,也可以创建新的访问密钥,但需要保证该密钥处在启用状态。
生成请求的签名字符串。
HTTP签名字符串由HTTP请求中的Method、Header和Body信息共同生成。
SignString = VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + DATE + "\n" + CanonicalizedHeaders + "\n" + CanonicalizedResource
上述签名字符串中的
\n
表示换行转义字符,+
表示字符串连接操作,其他部分定义如下表所示。名称
描述
示例
VERB
HTTP请求的方法名称。
PUT、GET、POST
CONTENT-MD5
HTTP请求中Body部分的MD5值。
说明MD5必须为大写字母和数字字符串。
0B9BE351E56C90FED853B32524253E8B
CONTENT-TYPE
HTTP请求中Body部分的类型。
application/json
DATE
HTTP请求中的标准时间戳头。
说明遵循RFC 1123格式,使用GMT标准时间。
Mon, 3 Jan 2010 08:33:47 GMT
CanonicalizedHeaders
由HTTP请求中以
x-cms
和x-acs
为前缀的自定义头构造的字符串。x-cms-api-version:0.1.0
x-cms-signature
CanonicalizedResource
由HTTP请求资源构造的字符串。
/event/custom/upload
上表中CanonicalizedHeaders和CanonicalizedResource构造方式如下:
CanonicalizedHeaders
将所有以
x-cms
和x-acs
为前缀的HTTP请求头的名字转换成小写字母。将所有CMS和ACS自定义请求头按照字典序的升序进行排序。
删除请求头和内容之间分隔符两端出现的任何空格。
将所有的请求头和内容用
\n
分隔符组合成最后的CanonicalizedHeaders。
CanonicalizedResource
将CanonicalizedResource设置为空字符串(””)。
将CanonicalizedResource中放入待访问的URI,例如:
/event/custom/upload
。如果请求包含查询字符串(
QUERY_STRING
),则在CanonicalizedResource字符串尾部添加?
和查询字符串。其中
QUERY_STRING
是URI中请求参数按字典序排序后的字符串,其中参数名和值之间用=
相隔组成字符串,并对参数名和值按照字典序升序排序,然后以&
符号连接构成字符串。其公式化描述如下:QUERY_STRING = "KEY1=VALUE1" + "&" + "KEY2=VALUE2"
生成请求的数字签名。
数字签名公式如下:
Signature=base16(hmac-sha1(UTF8-Encoding-Of(SignString),AccessKeySecret))
签名举例:
SignString="POST" + "\n" +"0B9BE351E56C90FED853B32524253E8B" + "\n" +"application/json" + "\n" +"Tue, 11 Dec 2018 21:05:51 +0800" + "\n" +"x-cms-api-version:1.0" + "\n" +"x-cms-ip:127.0.0.1" + "\n" +"x-cms-signature:hmac-sha1" + "\n" +"/metric/custom/upload" accesskey="testkey" accessSecret="testsecret" //签名密钥。
签名结果:
1DC19ED63F755ACDE203614C8A1157EB1097E922